"""
批量字幕繁体→简体中文转换器
用法：
    python subtitle_f2j.py 原始字幕.ass
同目录会生成 原始字幕_sc.ass 文件（_sc = Simplified Chinese）。
"""
import re
import sys
from pathlib import Path
from opencc import OpenCC

# 1. 初始化转换器（t2s = Traditional→Simplified）
cc = OpenCC('t2s')

def convert_line(line: str) -> str:
    """
    单行转换策略：
      - 特效代码/样式行：完全不动
      - 对话行：只对“真正的中文”部分做 t2s
    正则思路：用括号保护特效标签，其余部分再转换。
    """
    # 1) 保护 {\...} 标签
    def _protect(match):
        return '\x00' + match.group(0) + '\x01'

    line = re.sub(r'\{[^}]*\}', _protect, line)

    # 2) 保护 <...> /ASS 样式行
    line = re.sub(r'<[^>]*>', _protect, line)

    # 3) 转换中间可见文本
    line = cc.convert(line)

    # 4) 还原被保护部分
    line = line.replace('\x00', '').replace('\x01', '')

    return line

def process_file(file_path: Path):
    out_path = file_path.with_suffix(file_path.suffix + '_sc' + file_path.suffix)
    with file_path.open(encoding='utf-8') as fin, \
         out_path.open('w', encoding='utf-8') as fout:
        for raw in fin:
            fout.write(convert_line(raw))
    print(f'转换完成 → {out_path}')

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print('请拖入字幕文件，或在命令行输入：\n  python subtitle_f2j.py xxx.ass')
        sys.exit(1)
    src = Path(sys.argv[1]).expanduser()
    if not src.exists():
        print(f'文件不存在：{src}')
        sys.exit(1)
    process_file(src)